home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 43
/
Amiga Format CD43 (1999)(Future Publishing)(GB)(Track 1 of 2)[!][issue 1999-09].iso
/
-serious-
/
programming
/
c
/
pmm
/
doku
/
libsdoku
/
metaxpr.dok
< prev
next >
Wrap
Text File
|
1999-06-14
|
35KB
|
680 lines
========================== metaxpr.library 4.0 ============================
===========================================================================
Eine Bibliothek, die Datentransfer über xpr#?.library-Implementierungen
erleichtert. © Copyright 1991-92 by Olaf Barthel, alle Rechte vorbehalten.
Es wird keinerlei Gewährleistungspflicht für die vollständige
Funktionsfähigkeit der in diesem Dokument beschriebenen Software
übernommen. Jegliche Nutzung geschieht auf eigene Gefahr.
Anmerkung (M.Prüß):
GateXpr.Library ist eine veränderte Version (siehe History), entspricht
aber in allen Punkten bis auf die Filegrößenermittlung dem Original.
=============================== Motivation ================================
===========================================================================
Fast alle Programmierer, die sich mit der Erstellung von Tele-
kommunikationsoftware beschäftigen, stolpern irgendwann einmal über die
xpr#?.libraries, die auf allgemeine Art und Weise Protokollle für Up- und
Download implementieren.
An dieser Stelle verläßt die meisten Programmierer der Mut. Wer hat
schon Lust, eine über 100 KBytes große Dokumentation (in Englisch! wer
spricht schon Englisch!) durchzuarbeiten, um hinterher doch nur einen
Absturz zu Gesicht zu bekommen.
Nun gibt es aber dennoch Programmierer, die es geschafft haben, eine
Implementierung der entsprechenden Transferroutinen zu schreiben. Das
Resultat sind Programme, die mit einem Satz Parameter von CLI oder Shell
aufgerufen werden können.
Hier liegt der Hund begraben, denn soweit die Implementierung stabil
ist, so ergeben sich beim Aufruf Probleme: Ist der Transfer geglückt?
Wurde das Programm eventuell gar nicht geladen? Wie sehen die
Einstellungen des serial.device aus?
Hinzu kommt meist noch, daß ein Programm, das ein solches
Transferprogramm aufrufen will, unbedingt von CLI oder Shell aufgerufen
werden muß.
Vor diesem Hintergrund habe ich mich entschlossen, eine Bibliothek zu
schreiben, die externe Programmaufrufe für die Durchführung eines
Up-/Downloads überflüssig macht. Weiterhin hat das aufrufende Programm
fast völlige Kontrolle über die Ansteuerung der seriellen Schnittstelle und
die Möglichkeiten des Up-/Downloads.
==================== Bestandteile des MetaXPR-Paketes =====================
===========================================================================
Die folgenden Dateien, bzw. Verzeichnisse samt Inhalt gehören zum
MetaXPR-Paket:
MetaXPR.dok..................... Die Dokumentation der Library
metaxpr.library................. Die Library selbst (auf allen 680x0
Prozessoren lauffähig)
metaxpr.library.020............. Die Library selbst (benötigt mindestens
einen 68020 Prozessor). Um sie zu
installieren, bitte umbenennen in
"metaxpr.library"
metaxpr_lib.fd.................. Funktionsdefinitionsdatei der Library
MetaXPR.h....................... Header-Datei für `C' Programmierer
Receive,Receive.c............... Beispielprogramm für das Empfangen von
Dateien, in `C' geschrieben
Send,Send.c..................... Beispielprogramm für das Verschicken
von Dateien, in `C' geschrieben
SendFiles,SendFiles.c........... Beispielprogramm für das Verschicken
von mehreren Dateien,in `C' geschrieben
LinkLibs/amigados_metaxpr.lib... Linker-Library im AmigaDOS-Objektformat
LinkLibs/manx36_metaxpr.lib..... Linker-Library für Aztec `C' 3.6
LinkLibs/manx50_metaxpr.lib..... Linker-Library für Aztec `C' 5.0
LinkLibs/sasc_metaxpr.lib....... Linker-Library für Lattice/SAS `C'
Glue,SAS_Glue................... Quellcode zu den Linker-Libraries
============================= Funktionsweise ==============================
===========================================================================
Die Bibliothek metaxpr.library ist eine gewöhnliche Amiga-Systembibliothek,
die in das LIBS:-Verzeichnis kopiert werden sollte. Sie benimmt sich wie
jede andere Bibliothek (intuition.library, graphics.library, etc.). Wer
sich mit diesen Bibliotheken abgerackert hat, der wird auch diese nutzen
können.
Nach dem Öffnen der Bibliothek stehen dem Programmierer sieben
Funktionen zur Verfügung:
TransferSetup......... Initialisiert den seriellen Treiber und öffnet
die benötigte xpr.library. Diese Routine muß
aufgerufen werden, bevor eine der folgenden
Steuerroutinen aufgerufen wird.
TransferSetupShared... Eine in Version 2.0 der Bibliothek eingeführte
Funktion, die analog zu TransferSetup() arbeitet,
es aber erlaubt, vom aufrufenden Programm bereits
für den Datentransfer geöffnete Kanäle zu
verwenden, anstatt diese von der Bibliothek
öffnen zu lassen.
InstallTransferNote... Diese Funktion wurde in Version 3.0 der
Bibliothek eingeführt und erlaubt es, den
Transferroutinen eine Struktur zu übergeben, in
der Transferparameter (wie z.B. verbleibende
Übertragungsdauer in Sekunden und noch zu
übertragende Bytes) vermerkt werden und, wenn ein
Struktureintrag auf 0 gesetzt wird, den
programmtechnischen Abbruch des Transfers
herbeiführt.
ReceiveFile........... Empfängt eine Datei unter Ausnutzung der durch
TransferSetup/TransferSetupShared eingestellten
Parameter.
SendFile.............. Verschickt eine Datei unter Ausnutzung der durch
TransferSetup/TransferSetupShared eingestellten
Parameter.
SendMultipleFiles..... Diese Funktion wurde in Version 3.1 der
Bibliothek eingeführt und dient zum Verschicken
mehrerer Dateien am Stück. Es werden wie bei der
Funktion `SendFile' die mit
TransferSetup/TransferSetupShared eingestellten
Parameter benutzt.
GetOptions............ Liest die für die aktuell geöffnete xpr.library
eingestellten Parameter aus.
SetOptions............ Setzt die internen Parameter der aktuell
geöffneten xpr.library (siehe dazugehöriger
Dokumentation).
Im folgenden wird auf die einzelnen Routinen und deren Benutzung
eingegangen:
*
Fehler = TransferSetup(Treiber, Unit, Bibliothek, Baudrate, Datenbits,
D0 A0 D0 A1 D1 D2
Stopbits, Parität, Handshaking)
D3 D4 D5
Treiber - Name des zu benutzenden seriellen Treibers
(serial.device, modem0.device, etc). Wird als eine durch
ein Nullbyte abgeschlossene Zeichenkette übergeben.
Unit - Die Treibereinheit, die angesprochen werden soll;
entspricht üblicherweise der Nummer des seriellen Ports,
sollte man über keine Steckkarte mit mehreren seriellen
Anschlüssen verfügen, so ist hier eine 0 einzutragen.
Bibliothek - Der Name der xpr.library, die für den Transfer benutzt
werden soll (xprzmodem.library, xprxmodem.library, etc).
Der Name wird als durch ein Nullbyte abgeschlossene
Zeichenkette übergeben.
Baurate - Übertragungsgeschwindigkeit in Bits pro Sekunde.
Gebräuchliche Baudraten bewegen sich zwischen 300 und
31250 Baud.
Datenbits - Die Anzahl Datenbits, die bei der Übertragung verwendet
werden sollen. Üblicherweise 8, manchmal auch 7.
Stopbits - Die Anzahl Stopbits, die bei der Übertragung verwendet
werden sollen. Üblicherweise 1, sonst auch 0 oder 2.
Parität - Die bei der Übertragung zu verwendende Parität, gültige
Werte sind:
0 - Keine Parität.
1 - Gerade Parität.
2 - Ungerade Partität.
3 - Paritätsbit ist immer gesetzt.
4 - Paritätsbit ist immer gelöscht.
Handshaking - Gibt an, ob Hardware-Handshaking eingeschaltet werden
soll (0 = aus, 1 = ein).
Es muß darauf hingewiesen werden, daß diese Routine den seriellen
Treiber exklusiv für sich öffnet. Hat das aufrufende Programm den Treiber
bereits für sich belegt, wird der Aufruf dieser Funktion fehlschlagen!
Wenn man diesen Effekt vermeiden möchte, sollte man statt dieser Routine
besser TransferSetupShared() verwenden.
Der von dieser Routine geöffnete serielle Treiber wird erst nach dem
Schließen der metaxpr.library freigegeben!
Diese Routine liefert einen Wert zurück, der gleich 0 ist, wenn die
Initialisierungen geglückt sind und ungleich 0, wenn die Initialisierung
fehlgeschlagen ist. Anhand des zurückgelieferten Wertes läßt sich
entscheiden, welcher Fehler aufgetreten ist:
1 - Einer oder mehrere an die Routine übergebenen Aufrufparameter waren
nicht zulässig.
2 - Es konnte nicht genügend Speicher angefordert werden.
3 - Beim Anlegen von MsgPorts ist ein Fehler aufgetreten (alle
Signalbits sind offenbar schon belegt).
4 - Beim Öffnen des seriellen Treibers ist ein Fehler aufgetreten.
5 - Die Parameter des seriellen Treibers ließen sich nicht setzen.
6 - Der Zeitgeber (timer.device) ließ sich nicht öffnen.
7 - Die zu verwendende xpr.library ließ sich nicht öffnen.
8 - Die Initialisierung der xpr.library schlug fehl.
9 - Wurden die Übertragungsparameter über TransferSetup() gesetzt, so
können sie nur über die selbe Routine verändert werden. Gleiches
gilt für die Routine TransferSetupShared().
Diese Routine selbst läßt sich beliebig oft mit neuen Parametern
aufrufen. Alle hier angeforderten Resourcen werden beim Schließen der
Bibliothek wieder freigegeben.
*
Fehler = TransferSetupShared(ReadRequest, WriteRequest, Bibliothek)
D0 A0 A1 A2
ReadRequest - Die vom aufrufenden Programm zum Lesen von Daten der
seriellen Schnittstelle verwendete Struktur (struct
IOExtSer).
WriteRequest - Die vom aufrufenden Programm zum Schicken von Daten zur
seriellen Schnittstelle verwendete Struktur (struct
IOExtSer).
Bibliothek - Der Name der xpr.library, die für den Transfer benutzt
werden soll (xprzmodem.library, xprxmodem.library, etc).
Der Name wird als durch ein Nullbyte abgeschlossene
Zeichenkette übergeben.
Ein Telekommunikationsprogramm sollte üblicherweise mindestens zwei
Kanäle offen haben, um auf die seriellen Schnittstelle zugreifen zu können.
Möchte man diese Kanäle nicht schließen (einige Modems legen z.B. auf wenn
die vom serial.device aktivierte DTR-Leitung plötzlich abfällt), so bietet
es sich an, sie dieser Routine zu übergeben. Vorsicht: die Routine
überprüft, ob ReadRequest und WriteRequest verschieden sind und liefert bei
Übereinstimmung Fehlercode 1 zurück.
TransferSetupShared() verhält sich ansonsten genauso wie TransferSetup()
und liefert dieselben Fehlercodes zurück.
Baudrate oder Parameter von ReadRequest und WriteRequest werden nicht
modifiziert. Ich empfehle sowohl vor dem Aufruf dieser Routine ein
CMD_CLEAR an den seriellen Treiber zu schicken, als auch nach dem Schließen
der metaxpr.library. Es sollten keine Annahmen über die Einträge
io_Command, io_Data, io_Actual oder io_Length von ReadRequest und
WriteRequest gemacht werden, wenn die Routinen SendFile() und ReceiveFile()
zurückkehren!
*
Erfolg = ReceiveFile(Name, ÖffneFenster, Bildschirm)
D0 A0 D0 A1
Name - Der Name der zu empfangenden Datei. Der Name wird als
eine durch ein Nullbyte abgeschlossene Zeichenkette
übergeben. In diese Zeichenkette wird auch der Name der
zuletzt übertragenen Datei eingetragen, die Zeichenkette
sollte mindestens 256 Zeichen lang sein.
Nach Abschluß der Übertragung befindet sich in der
übergebenen Zeichenkette der komplette Name der
empfangenen Datei (der sich besonders bei Kermit und
ZModem vom übergebenen Dateinamen unterscheiden wird).
Die dieser Routine übergebene Zeichenkette sollte
mindestens 256 Zeichen lang sein. Wurden mehrere Dateien
empfangen, so enthält diese Zeichenkette nur den Namen
der zuletzt übertragenen Datei!
ÖffneFenster - Bestimmt, ob während der Übertragung ein Fenster geöffnet
werden soll, in dem Informationen über den Fortgang der
Übertragung angezeigt werden.
0 = kein Fenster soll geöffnet werden.
1 = ein Fenster soll geöffnet werden.
2 = ein Fenster soll geöffnet, aber nicht aktiviert
werden.
Bildschirm - Dieser Parameter operiert zusammen mit dem Parameter für
`ÖffneFenster'. Er bestimmt, auf welchem Bildschirm das
Fenster - wenn überhaupt - geöffnet werden soll. Hier
übergibt man die Adresse der Screen-Struktur des
jeweiligen Bildschirmes, oder den Wert NULL, um das
Fenster auf dem Workbench-Bildschirm zu öffnen.
Diese Routine liefert einen Wert zurück, der über den Erfolg des
Transfers informiert. Ist dieser Wert gleich 0, so ist die Übertragung
fehlgeschlagen oder abgebrochen worden. Ist der Wert ungleich 0, so ist
die Übertragung geglückt.
*
Erfolg = SendFile(Name, ÖffneFenster, Bildschirm)
D0 A0 D0 A1
Name - Der Name der zu verschickenden Datei. Der Name wird als
durch ein Nullbyte abgeschlossene Zeichenkette übergeben.
In diese Zeichenkette wird auch der Name der zuletzt
übertragenen Datei eingetragen, die Zeichenkette sollte
mindestens 256 Zeichen lang sein.
ÖffneFenster - Bestimmt, ob während der Übertragung ein Fenster geöffnet
werden soll, in dem Informationen über den Fortgang der
Übertragung angezeigt werden.
0 = kein Fenster soll geöffnet werden.
1 = ein Fenster soll geöffnet werden.
2 = ein Fenster soll geöffnet, aber nicht aktiviert
werden.
Bildschirm - Dieser Parameter operiert zusammen mit dem Parameter für
`ÖffneFenster'. Er bestimmt, auf welchem Bildschirm das
Fenster - wenn überhaupt - geöffnet werden soll. Hier
übergibt man die Adresse der Screen-Struktur des
jeweiligen Bildschirmes, oder den Wert NULL, um das
Fenster auf dem Workbench-Bildschirm zu öffnen.
Diese Routine liefert einen Wert zurück, der über den Erfolg des
Transfers informiert. Ist dieser Wert gleich 0, so ist die Übertragung
fehlgeschlagen oder abgebrochen worden. Ist der Wert ungleich 0, so ist
die Übertragung geglückt.
*
Erfolg = SendMultipleFiles(Namen, ÖffneFenster, Bildschirm)
D0 A0 D0 A1
Name - Die Adresse einer Reihe von Adresswerten von mit einem
Nullbyte abgeschlossenen Zeichenketten. In `C'
entspräche dies z.B. der Konstruktion
`char *Namen[123]', in anderen Sprachen kann man sich die
verlangte Datenstruktur als ein Feld von Langwörtern
vorstellen, von denen jedes die Adresse einer
Zeichenkette enthält:
Feld[ 0 ] -> "Dateiname 0"
Feld[ 1 ] -> "Dateiname 1"
Feld[ 2 ] -> "Dateiname 2"
:
:
Feld[n-1] -> "Dateiname n-1"
Feld[ n ] -> 0
Wie man an dieser Tabelle schon sieht, muß der Adresse
des letzten Dateinamens eine Null folgen, sodaß die
Library weiß, welche die letzte zu übertragende Datei
war.
Der Inhalt dieses Feldes wird von der
Übertragungsroutine nicht verändert.
ÖffneFenster - Bestimmt, ob während der Übertragung ein Fenster geöffnet
werden soll, in dem Informationen über den Fortgang der
Übertragung angezeigt werden.
0 = kein Fenster soll geöffnet werden.
1 = ein Fenster soll geöffnet werden.
2 = ein Fenster soll geöffnet, aber nicht aktiviert
werden.
Bildschirm - Dieser Parameter operiert zusammen mit dem Parameter für
`ÖffneFenster'. Er bestimmt, auf welchem Bildschirm das
Fenster - wenn überhaupt - geöffnet werden soll. Hier
übergibt man die Adresse der Screen-Struktur des
jeweiligen Bildschirmes, oder den Wert NULL, um das
Fenster auf dem Workbench-Bildschirm zu öffnen.
Diese Routine liefert einen Wert zurück, der über den Erfolg des
Transfers informiert. Ist dieser Wert gleich 0, so ist die Übertragung
fehlgeschlagen oder abgebrochen worden. Ist der Wert ungleich 0, so ist
die Übertragung geglückt.
Man sollte nicht erwarten, daß sich diese Routine auch um
Pattern-Matching und ähnlichen Luxus kümmert, es wird immer versucht die
jeweiligen Dateien unter den gegebenen Namen zu öffnen. Wird
Pattern-Matching benötigt, so müssen die zu übertragenden Dateien ermittelt
werden, bevor die Übertragung stattfindet.
Ob diese Funktion ihren Zweck erfüllen kann, hängt stark von der
verwendeten xpr.library ab; unterstützt diese keinen Batch-Transfer, so
wird zumindest versucht, die erste zu übertragende Datei zu verschicken.
*
Erfolg = GetOptions(Puffer)
D0 A0
Puffer - Hier werden die aktuell eingestellten Optionen der
geöffneten xpr.library abgelegt. Es wird eine
Zeichenkette erwartet, die mindestens 256 Zeichen lang
ist.
Diese Routine liefert einen Wert zurück, der über den Erfolg der Aktion
informiert. Ist dieser gleich 0, so konnten die Optionen nicht ausgelesen
werden. Ist er ungleich 0, so enthält der übergebene Puffer die mit einem
Nullbyte abgeschlossenen aktuellen Optionen.
*
Erfolg = SetOptions(Optionen)
D0 A0
Optionen - Die zu setzenden Optionen für die aktuelle xpr.library.
Wird als mit einem Nullbyte beendete Zeichenkette
erwartet.
Diese Routine liefert einen Wert zurück, der über den Erfolg der Aktion
informiert. Ist dieser gleich 0, so konnten die Optionen nicht gesetzt
werden. Ist er ungleich 0, so wurden die Optionen korrekt gesetzt.
*
Fehler = InstallTransferNote(Note)
D0 A0
Note - Die Adresse einer `C'-Struktur, die man sich auch als
eine Aufreihung von dreizehn Langwörtern vorstellen kann,
sie sieht wie folgt aus:
struct TransferNote
{
LONG tn_Continue; /* Ist dieser Wert gleich 0,
* so wird der Transfer-
* vorgang sofort ab-
* gebrochen.
*/
LONG tn_CarrierDetect;/* Der Inhalt dieser Variable
* gibt an, ob das Modem ein
* Trägersignal (Carrier)
* erkennt. Ist dieses Signal
* nicht mehr vorhanden, ist
* die Verbindung unterbrochen
* worden.
*/
LONG tn_Seconds; /* Anzahl der Sekunden, die
* der Transfervorgang noch
* dauern wird. Vorsicht!
* dieser Wert kann von
* Anfang an gleich 0 sein
* und sich während des
* gesamten Transfers
* nicht verändern.
*/
LONG tn_Bytes; /* Anzahl der noch zu
* übertragenden Bytes.
* Auch dieser Wert kann
* von Anfang an gleich 0
* sein und sich während
* des gesamten Transfers
* nicht verändern.
*/
APTR tn_UserData; /* Ein Eintrag, der vom
* Benutzer für seine
* Zwecke verwendet
* werden kann.
*/
char *tn_CurrentFile; /* Adresse einer Zeichenkette,
* die den Namen der gerade
* übertragenen Datei enthält.
* Vorsicht: dieser Wert kann
* auch NULL (0) sein, wenn
* gerade keine Datei übertragen
* wird.
*/
LONG tn_FilesToGo; /* Soweit bekannt, enthält diese
* Variable die Anzahl der noch
* zu übertragenden Dateien
* (0 = die letzte Datei wird
* gerade verschickt).
*/
LONG tn_ProtocolName; /* Name einer Datei, in der die
* Namen aller empfangenen und
* verschickten Dateien eingetragen
* werden. Steht hier eine Null,
* so wird keine Protokolldatei
* angelegt.
*/
LONG tn_Extension; /* Anzahl der dieser Strukturform
* noch folgenden Langwörter (für
* künftige Erweiterungen reserviert).
*/
LONG tn_WatchCarrier; /* Sofern tn_Extension einen Wert >= 1
* enthält, wird der Library über den
* Inhalt dieses Langworts mitgeteilt,
* ob bei Verlust des Trägersignals
* der Transfer abgebrochen werden
* soll. Falls Ja, ist hier eine 1,
* falls Nein, eine 0 einzutragen.
*/
LONG tn_Aborted; /* Sofern tn_Extension einen Wert >= 2
* enthält, wird der Library über den
* Inhalt dieses Langworts mitgeteilt,
* ob der Transfer durch den Anwender
* abgebrochen wurde.
*/
LONG tn_Error; /* Sofern tn_Extension einen Wert >= 3
* enthält, wird der Library über den
* Inhalt dieses Langworts mitgeteilt,
* ob der Transfer aufgrund eines
* Fehlers abgebrochen wurde. Ist der
* hier eingetragene Wert = 0, so ist
* kein Fehler aufgetreten, ist er 1,
* liegt ein AmigaDOS-Fehler vor, bei
* 2 ist ein Schnittstellenfehler
* aufgetreten.
*/
LONG tn_ErrorCode; /* Sofern tn_Extension einen Wert >= 4
* enthält, wird der Library über den
* Inhalt dieses Langworts mitgeteilt,
* aufgrund welchen Fehlers der Transfer
* abgebrochen wurde. Dies ist entweder
* ein AmigaDOS-Fehlercode, ein Fehlercode
* der Schnittstelle oder der Wert 1000,
* der angibt, daß das Carrier-Signal
* verlorengegangen ist.
*/
};
Diese Routine liefert einen Wert ungleich 0 zurück, wenn beim Eintragen
ein Fehler aufgetreten ist (die jeweiligen Fehlerwerte sind unter
`TransferSetup' aufgeführt), ein Wert gleich 0 wird zurückgeliefert, wenn
kein Fehler aufgetreten ist.
Typischerweise wird diese Funktion von einem separat laufenden Process
benutzt, um den im Transfer befindlichen Process überwachen und notfalls
abbrechen zu können. Die übergebene `TransferNote'-Struktur muß während
des gesamten Transfervorganges erhalten bleiben, sonst können
Systemabstürze die Folge sein. Der Bezug auf die Struktur bleibt bis zum
Schließen der Library oder bis zum nächsten Aufruf der Funktionen
TransferSetupShared() und TransferSetup() erhalten.
Zum Format der Protokolldatei: wird eine Datei gelesen oder
beschrieben, wenn sie verschickt oder empfangen wird, so wird ihr Name
zusammen mit dem jeweiligen Zugriffsmodus (`R' für Empfangen, `S' für
Verschicken) in die Datei geschrieben, deren Name unter tn_ProtocolName
eingetragen ist. Typischerweise sieht der Inhalt dieser Datei am Ende
einer Übertragung folgendermaßen aus:
R Work:Download/EmpfangeDatei1
R Work:Download/EmpfangeDatei2
:
:
etc.
An die unter tn_ProtocolName angegebene Datei werden die Namen der
empfangenen/verschickten Dateien _angehängt_, sie wird _nicht_
überschrieben.
Wird eine Datei nicht korrekt verschickt/empfangen, so wird statt der
Großbuchstaben "R" / "S" ein Kleinbuchstabe "r" / "s" vorangestellt.
Zum Schluß wird an die Liste der Dateinamen eine Zeile mit statistischen
Daten angehängt, die folgenden Aufbau hat:
+ Files <Anzahl> Bytes <Anzahl> CPS <Anzahl>
Es wird die Anzahl der empfangenen Dateien, die Anzahl der empfang-
enen Dateien und die durchschnittliche Übertragungsgeschwindigkeit in
Zeichen pro Sekunde angegeben.
================================ Anwendung ================================
===========================================================================
Für `C' habe ich eine Header-Datei bereitgestellt, die Prototypen und
Übergabewerte enthält, Linker-Bibliotheken sind ebenfalls vorhanden. Für
alle anderen Sprachen muß man sich mit der .fd-Datei behelfen.
Die übliche Reihenfolge der Aufrufe sähe z.B. wie folgt aus:
MetaXprBase = OpenLibrary("metaxpr.library",0);
:
:
Fehler = TransferSetup("serial.device",0,"xprzmodem.library",
2400,8,1,0,0);
:
:
Erfolg = ReceiveFile("Datei",0,0);
:
:
Erfolg = SendFile("Datei",1,Screen);
:
:
CloseLibrary(MetaXprBase);
Wem diese paar Zeilen nicht helfen, der kann mir seine Fragen entweder
brieflich, oder auf elektronischem Wege über Z-Net oder Usenet stellen.
====================== Anschrift & Bitte des Autors =======================
===========================================================================
Die Benutzung der metaxpr.library ist kostenfrei, ich verlange keine
Spenden, noch erwarte ich sie. Die einzige Auflage, die ich mache, ist
die, daß jeder, der neue Supportroutinen für die Bibliothek schreibt, diese
dem MetaXPR-Paket hinzufügt, oder sie mir zuschickt. Auf diese Weise soll
Jedermann Zugang zur Nutzung der Bibliothek erhalten.
Meine Anschrift:
Olaf Barthel
Brabeckstraße 35
D-3000 Hannover 71
Z-Netz: O.BARTHEL@A-LINK-H
Internet: olsen@sourcery.mxm.sub.org
o.barthel@a-link-h.comlink.de
========================= Entwicklungsgeschichte ==========================
===========================================================================
V4.2 Da es inzwischen Versionen bis hoch zu 6.5 gibt und ich eine
Kollision vermeiden möchte wurde die Library umgetauft. Diese
Version trägt den Namen GateXpr.Library, ist aber ansonsten
identisch mit MetaXpr.Library 4.1a
V4.1a Einige kleinere Optimierungen in der Anpassung.
V4.1 Anpassungen für Gateway-BBS by Michaela Prüß. Neue Berechnung der
Filegröße, da das Original und Aztec-C nicht miteinander harmo-
nierten. Danke an Olaf Barthel für die Quellen!
V4.0 Erweiterung der Überwachungsfunktionen, verschiedene Fehler
erschlagen.
V3.6- Interne Versionen.
V3.9
V3.5 Die Protokollierung der empfangenen und verschickten Dateien ist um
statistische Daten erweitert worden. Ebenfalls ist es jetzt
möglich, den Transfer bei Verlust des Carrier-Signales abbrechen zu
lassen.
V3.4 Die Library unterstützt andere Treiber als das Original
serial.device jetzt besser, es ist jetzt möglich, die
Transferaktionen in einer Datei mitprotokollieren zu lassen, das
Transferfenster kann jetzt auch inaktiv geöffnet werden.
V3.3 Einige interne Änderungen sind notwendig geworden; die Library
meldet jetzt korrekt, wenn ein Transfer abgebrochen wurde und es
erscheint kein AmigaDOS-Requester mehr, wenn Diskettenprobleme
auftreten (dieses Feature ist zur Unterstützung der automatischen
Ausführung von Netcalls gedacht).
V3.1 Die Library wurde wieder einmal um eine neue Funktion erweitert:
`SendMultipleFiles' ist hinzugekommen. Auch die
TransferNote-Struktur ist um einige Felder erweitert worden, auch
die Carrier-Erkennung sollte jetzt funktionieren.
V3.0 Die Library wurde um die Funktion `InstallTransferNote()'
erweitert.
V2.0 Es gibt die neue Funktion `TransferSetupShared()', die Library
sollte intern jetzt etwas stabiler arbeiten, ein paar Fehler sind
beseitigt.
V1.2 Das Fenster verträgt sich auch mit anderen Systemfonts als topaz 8,
werden andere Tasten als ^C oder Escape gedrückt, hängt der
Transfervorgang nicht mehr, die Bibliothek läßt sich auch unter
Kickstart 2.0 öffnen. Der Send und Receive übergebene Dateiname
enthält nach der Übertragung den Namen der zuletzt übertragenen
Datei.
V1.1 Erste öffentliche Verbreitung.